package com.yunhe.authority.service.authority;

import com.yunhe.authority.domain.authority.HomePage;
import com.yunhe.common.exception.ArgumentErrorException;
import com.yunhe.common.exception.ObjectNotFoundException;
import com.yunhe.common.exception.UniqueConstraintsException;
import org.springframework.transaction.annotation.Transactional;

/**
 * 首页对象Service
 * @desc 首页对象服务类定义
 * @author liuronglei
 */
public interface HomePageService {

    /**
     * 根据编号获得首页对象
     * @param name 首页编号
     */
    HomePage findByName(String name);

    /**
     * 新增首页对象
     * @param homePage 首页对象
     */
    @Transactional
    HomePage createHomePage(HomePage homePage)
            throws ArgumentErrorException, UniqueConstraintsException, ObjectNotFoundException;

    /**
     * 根据ID删除首页对象
     * @param homePageId 首页对象ID
     */
    @Transactional
    void deleteHomePage(Long homePageId);

    /**
     * 更新首页对象（更新全部字段）
     * @param homePage 首页对象
     */
    @Transactional
    HomePage updateHomePage(HomePage homePage)
            throws ArgumentErrorException, UniqueConstraintsException, ObjectNotFoundException;

    /**
     * 更新首页对象（更新指定字段）
     * @param homePageId 首页ID
     * @param name 首页名
     * @param title 首页标题
     * @param url 首页Url
     * @param activity 是否可用
     */
    @Transactional
    HomePage updateHomePage(Long homePageId,
                            String name,
                            String title,
                            String url,
                            Boolean activity)
            throws ArgumentErrorException, ObjectNotFoundException, UniqueConstraintsException;

    /**
     * 根据ID获得首页对象
     * @param id 首页对象ID
     */
    HomePage findByHomePageId(Long id);

    /**
     * 根据条件获得首页对象
     */
    Iterable<HomePage> findHomePages();

    /**
     * 根据用户ID获得首页对象
     * @param userId 用户ID
     */
    HomePage findHomePageByUserId(Long userId);

    /**
     * 根据单位ID获得首页对象
     * @param firmId 单位ID
     */
    HomePage findHomePageByFirmId(Long firmId);

}
